/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.uniceub.fsw.tutorial.dao;

import br.uniceub.fsw.arquitetura.persistencia.dao.BaseDAO;
import br.uniceub.fsw.arquitetura.persistencia.dao.ConstrutorSQL;
import br.uniceub.fsw.tutorial.vo.ResponsavelVO;
import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Gabriel
 */

public class ResponsavelDAO extends BaseDAO<ResponsavelVO> {

    @Override
    public void inserir(ResponsavelVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("INSERT INTO TB_Responsavel(NO_Responsavel, NU_RG)");
        query.append("VALUES (?, ?)");

        List<?> parametros = criarParametros(entidade.getNoResponsavel(), entidade.getNuRG());

        Integer idGerado = (Integer) executarInsercao(query.toString(), parametros);

        entidade.setIdResponsavel(idGerado);
    }
     @Override
    public void alterar(ResponsavelVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("UPDATE TB_Responsavel SET NO_Responsavel = ?");
        query.append("WHERE ID_Responsavel = ?");
        query.append("WHERE NU_RG = ?");

        List<?> parametros = criarParametros(entidade.getNoResponsavel(), entidade.getIdResponsavel(), entidade.getNuRG());

        executarAlteracao(query.toString(), parametros);
    }
    @Override
    public void excluir(ResponsavelVO entidade) {

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("DELETE FROM TB_Responsavel");
        query.append("WHERE ID_Responsavel = ?");

        executarAlteracao(query.toString(), criarParametros(entidade.getIdResponsavel()));
    }
    @Override
    public ResponsavelVO consultarPorId(Serializable id) {

        ResponsavelVO Responsavel = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_Responsavel T WHERE T.ID_Responsavel = ?");

        Responsavel = consultarUm(query.toString(), criarParametros(id));

        return Responsavel;
    }
    @Override
    public List<ResponsavelVO> consultarPorExemplo(ResponsavelVO exemplo) {

        List<ResponsavelVO> listaRetorno = null;

        ConstrutorSQL query = new ConstrutorSQL();

        query.append("SELECT * FROM TB_Responsavel T WHERE 1=1");

        mapearQueryParaExemplo(query, exemplo);

        listaRetorno = consultar(query.toString(), recuperarParametros());

        return listaRetorno;
    }
    @Override
    protected ResponsavelVO extrairObjetoResultado(ResultSet rs) throws SQLException {

        ResponsavelVO Responsavel = new ResponsavelVO();
        
        Responsavel.setIdResponsavel(rs.getInt("ID_Responsavel"));
        Responsavel.setNoResponsavel(rs.getString("NO_Responsavel"));
        Responsavel.setNuRG(rs.getInt("NU_RG"));
        
        
        return Responsavel;
    }
    @Override
    protected void mapearQueryParaExemplo(ConstrutorSQL query, ResponsavelVO exemplo) {

        if (exemplo.getNoResponsavel() != null && !exemplo.getNoResponsavel().isEmpty()) {
            query.append("AND T.NO_Responsavel LIKE ?");
            adicionarParametro("%" + exemplo.getNoResponsavel() + "%");
        }

        if ( exemplo.getNuRG() != null ){
            query.append("AND T.NU_RG LIKE ?");
            adicionarParametro("%" + exemplo.getNuRG() + "%");
        }
    }

}


